{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center>\n",
    "    <p style=\"text-align:center\">\n",
    "        <img alt=\"phoenix logo\" src=\"https://storage.googleapis.com/arize-phoenix-assets/assets/phoenix-logo-light.svg\" width=\"200\"/>\n",
    "        <br>\n",
    "        <a href=\"https://arize.com/docs/phoenix/\">Docs</a>\n",
    "        |\n",
    "        <a href=\"https://github.com/Arize-ai/phoenix\">GitHub</a>\n",
    "        |\n",
    "        <a href=\"https://arize-ai.slack.com/join/shared_invite/zt-2w57bhem8-hq24MB6u7yE_ZF_ilOYSBw#/shared-invite/email\">Community</a>\n",
    "    </p>\n",
    "</center>\n",
    "<h1 align=\"center\">Q&A Classification Evals</h1>\n",
    "\n",
    "The purpose of this notebook is:\n",
    "\n",
    "- to evaluate the performance of an LLM-assisted approach to detecting issues with Q&A systems on retrieved context data\n",
    "- to provide an experimental framework for users to iterate and improve on the default classification template.\n",
    "\n",
    "## Install Dependencies and Import Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#####################\n",
    "## N_EVAL_SAMPLE_SIZE\n",
    "#####################\n",
    "# Eval sample size determines the run time\n",
    "# 100 samples: GPT-4 ~ 80 sec / GPT-3.5 ~ 40 sec\n",
    "# 1,000 samples: GPT-4 ~15-17 min / GPT-3.5 ~ 6-7min (depending on retries)\n",
    "# 10,000 samples GPT-4 ~170 min / GPT-3.5 ~ 70min\n",
    "N_EVAL_SAMPLE_SIZE = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install -qq \"arize-phoenix-evals\" \"openai>=1\" ipython matplotlib pycm scikit-learn tiktoken nest_asyncio 'httpx<0.28'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ℹ️ To enable async request submission in notebook environments like Jupyter or Google Colab, optionally use `nest_asyncio`. `nest_asyncio` globally patches `asyncio` to enable event loops to be re-entrant. This is not required for non-notebook environments.\n",
    "\n",
    "Without `nest_asyncio`, eval submission can be much slower, depending on your organization's rate limits. Speed increases of about 5x are typical."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import nest_asyncio\n",
    "\n",
    "nest_asyncio.apply()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from getpass import getpass\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import openai\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pycm import ConfusionMatrix\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "from phoenix.evals import (\n",
    "    QA_PROMPT_RAILS_MAP,\n",
    "    QA_PROMPT_TEMPLATE,\n",
    "    OpenAIModel,\n",
    "    download_benchmark_dataset,\n",
    "    llm_classify,\n",
    ")\n",
    "\n",
    "pd.set_option(\"display.max_colwidth\", None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download Benchmark Dataset\n",
    "\n",
    "\n",
    "\n",
    "- Squad 2:\n",
    "The 2.0 version of the large-scale dataset Stanford Question Answering Dataset (SQuAD 2.0) allows researchers to design AI models for reading comprehension tasks under challenging constraints.\n",
    "https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/reports/default/15785042.pdf\n",
    "- Supplemental Data to Sqaud 2: In order to check the case of detecting incorrect answers, we created wrong answers based on the context data. The wrong answers are intermixed with right answers.\n",
    "- sampled_answer is a sampled column of randomly original Squad 2 or incorrect answers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = download_benchmark_dataset(task=\"qa-classification\", dataset_name=\"qa_generated_dataset\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- **question**: This is the question the Q&A system is running against\n",
    "- **sampled_answer**: This is a random sample of correct_answer from Squad 2 or wrong_answer which is a made up incorrect answer. This is the column we test against as it has wrong and right answers.\n",
    "- **correct_answer**: True if answer is correct, False if not. The ground truth to test against.\n",
    "- **answers**: This is the right answer to the question.\n",
    "- **wrong_answer**: This is an incorrect answer generated by the context.\n",
    "- **context**: This is the context to be used to answer the question, and is what Q&A Eval must use to check the correct answer.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>title</th>\n",
       "      <th>context</th>\n",
       "      <th>question</th>\n",
       "      <th>answers</th>\n",
       "      <th>correct_answer</th>\n",
       "      <th>wrong_answer</th>\n",
       "      <th>sampled_answer</th>\n",
       "      <th>answer_true</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>57317e8d497a881900248f87</td>\n",
       "      <td>Mosaic</td>\n",
       "      <td>Jerusalem with its many holy places probably had the highest concentration of mosaic-covered churches but very few of them survived the subsequent waves of destructions. The present remains do not do justice to the original richness of the city. The most important is the so-called \"Armenian Mosaic\" which was discovered in 1894 on the Street of the Prophets near Damascus Gate. It depicts a vine with many branches and grape clusters, which springs from a vase. Populating the vine's branches are peacocks, ducks, storks, pigeons, an eagle, a partridge, and a parrot in a cage. The inscription reads: \"For the memory and salvation of all those Armenians whose name the Lord knows.\" Beneath a corner of the mosaic is a small, natural cave which contained human bones dating to the 5th or 6th centuries. The symbolism of the mosaic and the presence of the burial cave indicates that the room was used as a mortuary chapel.</td>\n",
       "      <td>When was the Armenian Mosaic re-discovered?</td>\n",
       "      <td>1894</td>\n",
       "      <td>True</td>\n",
       "      <td>The Armenian Mosaic was re-discovered in 1920.</td>\n",
       "      <td>1894</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>56cfabed234ae51400d9be49</td>\n",
       "      <td>New_York_City</td>\n",
       "      <td>The first non-Native American inhabitant of what would eventually become New York City was Dominican trader Juan Rodriguez (transliterated to Dutch as Jan Rodrigues). Born in Santo Domingo of Portuguese and African descent, he arrived in Manhattan during the winter of 1613–1614, trapping for pelts and trading with the local population as a representative of the Dutch. Broadway, from 159th Street to 218th Street, is named Juan Rodriguez Way in his honor.</td>\n",
       "      <td>Who was the first non-Indian person to live in what is now NYC?</td>\n",
       "      <td>Juan Rodriguez</td>\n",
       "      <td>True</td>\n",
       "      <td>The first non-Indian person to live in what is now NYC was Italian explorer Christopher Columbus.</td>\n",
       "      <td>Juan Rodriguez</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>571a2c554faf5e1900b8a8f6</td>\n",
       "      <td>Memory</td>\n",
       "      <td>Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning.</td>\n",
       "      <td>Which part of the brain does short-term memory seem to rely on?</td>\n",
       "      <td>frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe</td>\n",
       "      <td>True</td>\n",
       "      <td>The cerebellum</td>\n",
       "      <td>frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>57301bf5b2c2fd1400568889</td>\n",
       "      <td>Roman_Republic</td>\n",
       "      <td>In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship.</td>\n",
       "      <td>What provided the Roman senate with exuberance?</td>\n",
       "      <td>successes against Catiline</td>\n",
       "      <td>True</td>\n",
       "      <td>The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.</td>\n",
       "      <td>The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>572f8ee0b2c2fd14005681f6</td>\n",
       "      <td>Armenia</td>\n",
       "      <td>The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh.</td>\n",
       "      <td>What area did the Hasan-jalalians command?</td>\n",
       "      <td>Artsakh and Utik</td>\n",
       "      <td>True</td>\n",
       "      <td>The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor.</td>\n",
       "      <td>Artsakh and Utik</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         id           title  \\\n",
       "0  57317e8d497a881900248f87          Mosaic   \n",
       "1  56cfabed234ae51400d9be49   New_York_City   \n",
       "2  571a2c554faf5e1900b8a8f6          Memory   \n",
       "3  57301bf5b2c2fd1400568889  Roman_Republic   \n",
       "4  572f8ee0b2c2fd14005681f6         Armenia   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     context  \\\n",
       "0  Jerusalem with its many holy places probably had the highest concentration of mosaic-covered churches but very few of them survived the subsequent waves of destructions. The present remains do not do justice to the original richness of the city. The most important is the so-called \"Armenian Mosaic\" which was discovered in 1894 on the Street of the Prophets near Damascus Gate. It depicts a vine with many branches and grape clusters, which springs from a vase. Populating the vine's branches are peacocks, ducks, storks, pigeons, an eagle, a partridge, and a parrot in a cage. The inscription reads: \"For the memory and salvation of all those Armenians whose name the Lord knows.\" Beneath a corner of the mosaic is a small, natural cave which contained human bones dating to the 5th or 6th centuries. The symbolism of the mosaic and the presence of the burial cave indicates that the room was used as a mortuary chapel.   \n",
       "1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The first non-Native American inhabitant of what would eventually become New York City was Dominican trader Juan Rodriguez (transliterated to Dutch as Jan Rodrigues). Born in Santo Domingo of Portuguese and African descent, he arrived in Manhattan during the winter of 1613–1614, trapping for pelts and trading with the local population as a representative of the Dutch. Broadway, from 159th Street to 218th Street, is named Juan Rodriguez Way in his honor.   \n",
       "2                                                                 Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning.   \n",
       "3                                                                                                                                                                                                                                                                                                    In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship.   \n",
       "4                                                                                                                                                                                                                                                                                                                                                                        The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh.   \n",
       "\n",
       "                                                          question  \\\n",
       "0                      When was the Armenian Mosaic re-discovered?   \n",
       "1  Who was the first non-Indian person to live in what is now NYC?   \n",
       "2  Which part of the brain does short-term memory seem to rely on?   \n",
       "3                  What provided the Roman senate with exuberance?   \n",
       "4                       What area did the Hasan-jalalians command?   \n",
       "\n",
       "                                                                          answers  \\\n",
       "0                                                                            1894   \n",
       "1                                                                  Juan Rodriguez   \n",
       "2  frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe   \n",
       "3                                                      successes against Catiline   \n",
       "4                                                                Artsakh and Utik   \n",
       "\n",
       "   correct_answer  \\\n",
       "0            True   \n",
       "1            True   \n",
       "2            True   \n",
       "3            True   \n",
       "4            True   \n",
       "\n",
       "                                                                                        wrong_answer  \\\n",
       "0                                                     The Armenian Mosaic was re-discovered in 1920.   \n",
       "1  The first non-Indian person to live in what is now NYC was Italian explorer Christopher Columbus.   \n",
       "2                                                                                     The cerebellum   \n",
       "3                        The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.   \n",
       "4                                  The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor.   \n",
       "\n",
       "                                                                   sampled_answer  \\\n",
       "0                                                                            1894   \n",
       "1                                                                  Juan Rodriguez   \n",
       "2  frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe   \n",
       "3     The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.   \n",
       "4                                                                Artsakh and Utik   \n",
       "\n",
       "   answer_true  \n",
       "0         True  \n",
       "1         True  \n",
       "2         True  \n",
       "3        False  \n",
       "4         True  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display Binary Q&A Classification Template\n",
    "\n",
    "View the default template used to classify hallucinations. You can tweak this template and evaluate its performance relative to the default."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "You are given a question, an answer and reference text. You must determine whether the\n",
      "given answer correctly answers the question based on the reference text. Here is the data:\n",
      "    [BEGIN DATA]\n",
      "    ************\n",
      "    [Question]: {input}\n",
      "    ************\n",
      "    [Reference]: {reference}\n",
      "    ************\n",
      "    [Answer]: {output}\n",
      "    [END DATA]\n",
      "Your response must be a single word, either \"correct\" or \"incorrect\",\n",
      "and should not contain any text or characters aside from that word.\n",
      "\"correct\" means that the question is correctly and fully answered by the answer.\n",
      "\"incorrect\" means that the question is not correctly or only partially answered by the\n",
      "answer.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(QA_PROMPT_TEMPLATE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Configure the API Key\n",
    "\n",
    "Configure your OpenAI API key."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "if not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\n",
    "    openai_api_key = getpass(\"🔑 Enter your OpenAI API key: \")\n",
    "openai.api_key = openai_api_key\n",
    "os.environ[\"OPENAI_API_KEY\"] = openai_api_key"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Benchmark Dataset Sample\n",
    "Sample size determines run time\n",
    "Recommend iterating small: 100 samples\n",
    "Then increasing to large test set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sample = (\n",
    "    df.sample(n=N_EVAL_SAMPLE_SIZE)\n",
    "    .reset_index(drop=True)\n",
    "    .rename(\n",
    "        columns={\n",
    "            \"question\": \"input\",\n",
    "            \"context\": \"reference\",\n",
    "            \"sampled_answer\": \"output\",\n",
    "        }\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LLM Evals: Q&A Classifications GPT-4\n",
    "Run Q&A classifications against a subset of the data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Instantiate the LLM and set parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(\n",
    "    model_name=\"gpt-4\",\n",
    "    temperature=0.0,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"Hello! I'm working perfectly. How can I assist you today?\""
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model(\"Hello world, this is a test if you are working?\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Run LLM Eval using the template against the dataset: This is the main Eval function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ca05336a691d49cf9b3fe40fa8ab9e1e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The rails force the output to specific values of the template\n",
    "# It will remove text such as \",,,\" or \"...\", anything not the\n",
    "# binary value expected from the template\n",
    "rails = list(QA_PROMPT_RAILS_MAP.values())\n",
    "Q_and_A_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=QA_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "Evaluate the predictions against human-labeled ground-truth Q&A labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "     correct       1.00      0.88      0.94        50\n",
      "   incorrect       0.89      1.00      0.94        50\n",
      "\n",
      "    accuracy                           0.94       100\n",
      "   macro avg       0.95      0.94      0.94       100\n",
      "weighted avg       0.95      0.94      0.94       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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374YO3assv4nn3yCO3fuYNiwYTh//jy2bduG2NhYfPbZZxr1q3GyMmrUKGRnZwMAUlJSEBERgZCQEKSmpiIiIkLT5oiIiOglaHM3UFn16NED06dPR2RkJLy9vZGcnIyEhATloturV68qbxYLPF24u2PHDhw5cgRNmjTB0KFDMWzYMLXbnEuj8TRQamoqGjVqBADYtGkTOnfujNjYWBw/fhwhISGaNkdERER6ZMiQISVO++zdu7dYmZ+fH/78889y9anxyIqJiQkePHgAANi9ezfat28PALC2tlaOuBAREVHFkkokWjn0gcYjK2+88QYiIiLg7++Pw4cPY/369QCeLph5/q62REREVDH41OVSzJ07F1WqVMHGjRsxf/585f39f/vtN3To0EHrARIREVFxhvTUZY1HVmrXro1ff/21WPmsWbO0EhARERHRszQeWTl+/DhSUlKUX//8888IDQ3FV199hYKCAq0GR0REROpVxm6gyqJxsjJ48GCcP38ewNN7/vfs2RNVq1bFhg0bMHr0aK0HSERERMUZ0gJbjZOV8+fPw9vbGwCwYcMGvPnmm1i7di1WrFiBTZs2aTs+IiIiMnAar1kRQkChUAB4unW5U6dOAJ7e+OXWrVvajY6IiIjUkvz/Ud429IHGyYqPjw++/vprBAUFYd++fZg/fz6ApzeLe/6x0URERFQxtLGbR192A2k8DRQfH4/jx49jyJAhGDduHNzd3QEAGzduRKtWrbQeIBERERk2jUdWmjRporIbqMi0adNUHgFNREREFUcqeXqUtw19oHGyUhK5XK6tpoiIiOgFDGkaSONkpbCwELNmzcKPP/6Iq1evFru3yp07d7QWHBEREZHGa1ZiYmIwc+ZM9OjRA/fv30dERAS6desGqVSK6OjoCgiRiIiI1DGEG8IBL5GsrFmzBosXL8aIESNQpUoV9OrVC0uWLEFkZGS5HwFNREREZWNIzwbSOFlJT0+Hp6cnAMDc3Bz3798HAHTq1Anbtm3TbnRERESkVtEC2/Ie+kDjZKVWrVq4efMmAMDNzQ07d+4EABw5cgQymUy70REREZHB0zhZ6dq1KxITEwEAn3/+OSZMmIB69eqhb9+++Oijj7QeIBERERVnSNNAGu8GmjJlivLvPXr0QO3atZGUlIR69eqhc+fOWg2OiIiI1OPt9jXg5+cHPz8/bcRCRERE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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"answer_true\"].map(QA_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, Q_and_A_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=rails\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  LLM Evals: Q&A Classifications GPT-3.5\n",
    "\n",
    "\n",
    "Evaluate the predictions against human-labeled ground-truth Q&A labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-3.5-turbo\", temperature=0.0, request_timeout=20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a10ca79971f34ba1a7a87e766ece3576",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Exception in worker on attempt 1: raised APITimeoutError('Request timed out.')\n",
      "Requeuing...\n"
     ]
    }
   ],
   "source": [
    "Q_and_A_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=QA_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=list(QA_PROMPT_RAILS_MAP.values()),\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "     correct       0.96      0.94      0.95        50\n",
      "   incorrect       0.94      0.96      0.95        50\n",
      "\n",
      "    accuracy                           0.95       100\n",
      "   macro avg       0.95      0.95      0.95       100\n",
      "weighted avg       0.95      0.95      0.95       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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p6ejjJMdHjx4UGQ95Tl/Jyp8tgFypeapDQWlynyEq3M7FGm8umBwycp/HZMVMgZMVui/6q0mK4M2wKSQyUp25iNc/Ur/kxWDmrNCRERExseg5qwQERHRC8a0GojJChERkQHSxWoeA8lVOAxERERE+o09K0RERAZILpdBLi9c14go5PFvC5MVIiIiA8RhICIiIiI9wZ4VIiIiA8TVQERERKTXjGkYiMkKERGRATKmnhXOWSEiIiK9xp4VIiIiA2RMPStMVoiIiAyQMc1Z4TAQERER6TX2rBARERkgGXQwDATD6FphskJERGSAOAxEREREpCfYs0JERGSAuBqIiIiI9BqHgYiIiIj0BHtWiIiIDBCHgYiIiEivGdMwEJMVIiIiA2RMPSucs0JERER6jT0rREREhkgHw0AGcgNbJitERESGiMNARERERHqCPStEREQGiKuBiIiISK9xGIiIiIhIT7BnhYiIyABxGIiIiIj0GoeBiIiIiPQEe1aIiIgMkDH1rDBZISIiMkCcs0JERER6zZh6VjhnhYiIiPSa1snKkydP8PjxY+nxtWvXEBsbix07dug0MCIiIspbzjBQYTdDoHWy0rZtW3z33XcAgPv376Nu3bqYOXMm2rZti/nz5+s8QCIiIsotZxiosJsh0DpZOXnyJBo0aAAA2LBhA5ydnXHt2jV89913+Oqrr3QeIBERERk3rSfYPn78GNbW1gCAHTt2oH379pDL5ahXrx6uXbum8wCJiIgoNxl0sBpIJ5EUPa17Vry8vLB582bcuHEDv/32G5o2bQoASElJgY2Njc4DJCIiotzkMplONm3NmzcPHh4eMDc3R926dXH06NF869+/fx8DBgyAq6srlEolKlWqhG3btml3rdoGGRkZieHDh8PDwwN16tSBv78/gBe9LDVq1NC2OSIiIjIQ69atQ0REBKKionDy5ElUq1YNzZo1Q0pKisb6WVlZeP/995GUlIQNGzbgwoULWLx4McqUKaPVebUeBurQoQPee+893Lp1C9WqVZPKmzRpgnbt2mnbHBEREb2B4rgp3KxZs9C3b1+Eh4cDABYsWICtW7di6dKl+Pzzz3PVX7p0Ke7evYtDhw7BzMwMAODh4aF1nG90nxUXFxdYW1tj586dePLkCQCgdu3aqFy58ps0R0RERFp626uBsrKycOLECQQHB0tlcrkcwcHBOHz4sMZjtmzZAn9/fwwYMADOzs549913ER0djezsbK2uVeuelbS0NHTs2BF79uyBTCbDpUuXUKFCBfTu3Rt2dnaYOXOmtk0SERGRluSyF1th2wCA9PR0tXKlUgmlUqlWdufOHWRnZ8PZ2Vmt3NnZGefPn9fY/tWrV7F7925069YN27Ztw+XLl/Hpp5/i2bNniIqKKnicBa75f0OHDoWZmRmuX7+OEiVKSOWdOnXC9u3btW2OiIiIipmbmxtsbW2lLSYmRiftqlQqODk5YdGiRahVqxY6deqEMWPGYMGCBVq1o3XPyo4dO/Dbb7+hbNmyauUVK1bk0mUiIqK3RaaD7/b5/+E3btxQW9H7aq8KADg4OMDExAS3b99WK799+zZcXFw0Nu/q6gozMzOYmJhIZT4+PkhOTkZWVhYUCkWBwtS6Z+XRo0dqPSo57t69q/HiiIiISPd0ebt9GxsbtU3T33OFQoFatWohLi5OKlOpVIiLi5NWBr8qICAAly9fhkqlksouXrwIV1fXAicqwBskKw0aNJButw+8yOpUKhWmTZuGRo0aadscERERGYiIiAgsXrwYK1aswLlz5/DJJ5/g0aNH0uqgnj17YvTo0VL9Tz75BHfv3sXgwYNx8eJFbN26FdHR0RgwYIBW59V6GGjatGlo0qQJjh8/jqysLIwcORJ//fUX7t69i4MHD2rbHBEREb0B2f//FbYNbXTq1AmpqamIjIxEcnIyqlevju3bt0uTbq9fvw65/N9+EDc3N/z2228YOnQoqlatijJlymDw4MEYNWqUVufVOll59913cfHiRXz99dewtrZGRkYG2rdvL92djoiIiIqeLlcDaWPgwIEYOHCgxn179+7NVebv748jR45of6KXaJ2sAICtrS3GjBlTqBMTERERFYTWc1a2b9+O33//XXo8b948VK9eHV27dsW9e/d0GhwRERFp9rZvClectE5WRowYId08JiEhAREREWjRogUSExMRERGh8wCJiIgoN12uBtJ3Wg8DJSYmokqVKgCAjRs3onXr1oiOjsbJkyfRokULnQdIRERExk3rnhWFQoHHjx8DAHbt2oWmTZsCAOzt7XPdrpeIiIiKhlwm08lmCLTuWXnvvfcQERGBgIAAHD16FOvWrQPw4iYvr97VloiIiIpGcXzrcnHRumfl66+/hqmpKTZs2ID58+ejTJkyAIBff/0VzZs313mARERElJsxTbDVumelXLly+OWXX3KVz549WycBEREREb1M656VkydPIiEhQXr8008/ISQkBF988QWysrJ0GhwRERFpZkyrgbROVvr374+LFy8CAK5evYrOnTujRIkSWL9+PUaOHKnzAImIiCg3Y5pgq3WycvHiRVSvXh0AsH79ejRs2BBr1qzB8uXLsXHjRl3HR0REREZO6zkrQgjpq5537dqFVq1aAXjxZUV37tzRbXRERESkkez/W2HbMARaJyt+fn748ssvERwcjH379mH+/PkAXtwsLudbF4mIiKho6WI1j6GsBtJ6GCg2NhYnT57EwIEDMWbMGHh5eQEANmzYgPr16+s8QCIiIjJuWvesVK1aVW01UI7p06fDxMREJ0ERERFR/uSyF1th2zAEWicreTE3N9dVU0RERPQaxjQMpHWykp2djdmzZ+OHH37A9evXc91b5e7duzoLjoiIiEjrOSsTJkzArFmz0KlTJzx48AARERFo37495HI5xo8fXwQhEhERkSbGcEM44A2SldWrV2Px4sUYNmwYTE1N0aVLFyxZsgSRkZE4cuRIUcRIRERErzCm7wbSOllJTk6Gr68vAMDKygoPHjwAALRq1Qpbt27VbXRERESkUc4E28JuhkDrZKVs2bK4desWAMDT0xM7duwAABw7dgxKpVK30REREZHR0zpZadeuHeLi4gAAn332GcaNG4eKFSuiZ8+e6NWrl84DJCIiotyMaRhI69VAU6ZMkf7fqVMnlCtXDocPH0bFihXRunVrnQZHREREmvF2+1rw9/eHv7+/LmIhIiIiyqVAycqWLVsK3GCbNm3eOBgiIiIqGLlMBnkhh3EKe/zbUqBkJSQkpECNyWQyZGdnFyYeIiIiKgBd3CvFQHKVgiUrKpWqqOMgIiIi0khn3w1EREREb48xfTdQgZcu7969G1WqVEF6enqufQ8ePMA777yD/fv36zQ4IiIi0qywt9o3pFvuFzhZiY2NRd++fWFjY5Nrn62tLfr374/Zs2frNDgiIiKiAicrp0+fRvPmzfPc37RpU5w4cUInQREREVH+clYDFXYzBAWes3L79m2YmZnl3ZCpKVJTU3USFBEREeXPmFYDFbhnpUyZMjhz5kye+//880+4urrqJCgiIiLKnzHdbr/AyUqLFi0wbtw4PH36NNe+J0+eICoq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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"answer_true\"].map(QA_PROMPT_RAILS_MAP).tolist()\n",
    "classes = list(QA_PROMPT_RAILS_MAP.values())\n",
    "\n",
    "print(classification_report(true_labels, Q_and_A_classifications, labels=classes))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=classes\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  LLM Evals: Q&A Classifications GPT-4 Turbo\n",
    "\n",
    "\n",
    "Evaluate the predictions against human-labeled ground-truth Q&A labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-4-turbo-preview\", temperature=0.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9994cc409e634712b8bb35535b11d152",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Q_and_A_classifications = llm_classify(\n",
    "    dataframe=df_sample,\n",
    "    template=QA_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=list(QA_PROMPT_RAILS_MAP.values()),\n",
    "    concurrency=20,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "     correct       1.00      0.88      0.94        50\n",
      "   incorrect       0.89      1.00      0.94        50\n",
      "\n",
      "    accuracy                           0.94       100\n",
      "   macro avg       0.95      0.94      0.94       100\n",
      "weighted avg       0.95      0.94      0.94       100\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAHHCAYAAAB+wBhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABZFElEQVR4nO3deXhM1/8H8PdMJDORjchOJCQEFQlCGqkmSEWDCtXaWpHauigaWxVZqEStUdS+1Va1VLU0ltRW0lqjUTsJiizWLEjInN8ffpmvkUlkZCIznffLc59Hzpx7zudORvJxlnslQggBIiIiIh0lrewAiIiIiErDZIWIiIh0GpMVIiIi0mlMVoiIiEinMVkhIiIincZkhYiIiHQakxUiIiLSaUxWiIiISKcxWSEiIiKdxmSFDN6FCxfQvn17WFlZQSKRYMuWLVptPy0tDRKJBCtWrNBqu/osMDAQgYGBWm3z2rVrkMvlOHjwoFbb1WUSiQTR0dHKr1esWAGJRIK0tLRXGoerqyv69eun/DohIQHm5ubIysp6pXHQfxeTFdIJly5dwuDBg1G3bl3I5XJYWlrC398fs2fPxsOHDyu077CwMKSkpGDy5MlYtWoVfHx8KrS/V6lfv36QSCSwtLRU+z5euHABEokEEokE06dP17j9GzduIDo6GsnJyVqItnwmTpwIX19f+Pv7K8uKrr9JkyZQ92QRiUSCIUOGvMowDUKHDh3g7u6OuLi4yg6F/iOYrFCl27ZtGzw9PfHjjz+ic+fOmDNnDuLi4lC7dm2MGjUKw4YNq7C+Hz58iKSkJPTv3x9DhgzBBx98gFq1amm1DxcXFzx8+BAffvihVtstqypVquDBgwf45Zdfir22Zs0ayOXyl277xo0biImJ0ThZ2blzJ3bu3PnS/T4vKysLK1euxMcff6z29ZSUFGzevFlr/emqDz/8EA8fPoSLi0tlh4LBgwdj4cKFyMnJqexQ6D+AyQpVqtTUVPTs2RMuLi44ffo0Zs+ejYEDB+Kzzz7DunXrcPr0abz22msV1n/RMHW1atUqrA+JRAK5XA4jI6MK66M0MpkM7dq1w7p164q9tnbtWnTs2PGVxfLgwQMAgImJCUxMTLTW7urVq1GlShV07ty52GumpqaoX78+Jk6cqHZ0RVuePHmCgoKCCmu/LIyMjCCXyyGRSCo1DgB49913kZ+fjw0bNlR2KPQfwGSFKtXUqVORm5uLpUuXwtHRsdjr7u7uKiMrT548waRJk+Dm5gaZTAZXV1d89dVXyM/PVznP1dUVnTp1wh9//IGWLVtCLpejbt26+P7775V1oqOjlf8DHTVqFCQSCVxdXQE8nT4o+vuzoqOji/0i2LVrF9544w1Uq1YN5ubm8PDwwFdffaV8vaQ1K7///jtat24NMzMzVKtWDV26dMGZM2fU9nfx4kX069cP1apVg5WVFcLDw5W/+Muid+/e+O2333Dv3j1l2ZEjR3DhwgX07t27WP07d+5g5MiR8PT0hLm5OSwtLfH222/j5MmTyjp79+5FixYtAADh4eHK6aSi6wwMDETjxo1x7NgxvPnmm6hataryfXl+zUpYWBjkcnmx6w8ODkb16tVx48aNUq9vy5Yt8PX1hbm5ebHXpFIpxo8fj7///hs//fRTqe0AQGZmJvr37w97e3vI5XJ4eXlh5cqVKnWKvqfTp09HfHy88vN4+vRp5ffs/Pnz+OCDD2BlZQVbW1tMmDABQghcu3YNXbp0gaWlJRwcHDBjxgyVtgsKChAZGYnmzZvDysoKZmZmaN26Nfbs2fPC2J9fs1IUi7rj2TUmCoUC8fHxeO211yCXy2Fvb4/Bgwfj7t27Ku0LIfD111+jVq1aqFq1Ktq0aYN//vlHbSx2dnZo0qQJfv755xfGTfQiTFaoUv3yyy+oW7cuWrVqVab6AwYMQGRkJJo1a4ZZs2YhICAAcXFx6NmzZ7G6Fy9eRPfu3fHWW29hxowZqF69Ovr166f84dqtWzfMmjULANCrVy+sWrUK8fHxGsX/zz//oFOnTsjPz8fEiRMxY8YMvPPOOy9c5Ll7924EBwcjMzMT0dHRiIiIwKFDh+Dv7692ceT777+PnJwcxMXF4f3338eKFSsQExNT5ji7desGiUSiMhWydu1aNGjQAM2aNStW//Lly9iyZQs6deqEmTNnYtSoUUhJSUFAQIAycWjYsCEmTpwIABg0aBBWrVqFVatW4c0331S2c/v2bbz99tvw9vZGfHw82rRpoza+2bNnw9bWFmFhYSgsLAQALFy4EDt37sScOXPg5ORU4rU9fvwYR44cUXsdRXr37o169eq9cHTl4cOHCAwMxKpVq9CnTx9MmzYNVlZW6NevH2bPnl2s/vLlyzFnzhwMGjQIM2bMgLW1tfK1Hj16QKFQYMqUKfD19cXXX3+N+Ph4vPXWW6hZsya++eYbuLu7Y+TIkdi/f7/yvOzsbCxZsgSBgYH45ptvEB0djaysLAQHB2s83datWzfl96XoGD58OICnyUSRwYMHY9SoUcp1YuHh4VizZg2Cg4Px+PFjZb3IyEhMmDABXl5emDZtGurWrYv27dsjLy9Pbf/NmzfHoUOHNIqZSC1BVEnu378vAIguXbqUqX5ycrIAIAYMGKBSPnLkSAFA/P7778oyFxcXAUDs379fWZaZmSlkMpkYMWKEsiw1NVUAENOmTVNpMywsTLi4uBSLISoqSjz7z2bWrFkCgMjKyiox7qI+li9frizz9vYWdnZ24vbt28qykydPCqlUKvr27Vusv48++kilza5du4oaNWqU2Oez12FmZiaEEKJ79+6iXbt2QgghCgsLhYODg4iJiVH7Hjx69EgUFhYWuw6ZTCYmTpyoLDty5EixaysSEBAgAIgFCxaofS0gIEClbMeOHQKA+Prrr8Xly5eFubm5CA0NfeE1Xrx4UQAQc+bMKfX6V65cKQCIzZs3K18HID777DPl1/Hx8QKAWL16tbKsoKBA+Pn5CXNzc5Gdna18LwAIS0tLkZmZqdJn0fds0KBByrInT56IWrVqCYlEIqZMmaIsv3v3rjA1NRVhYWEqdfPz81XavHv3rrC3ty/2OQAgoqKilF8vX75cABCpqalq36usrCxRu3Zt4enpKXJzc4UQQhw4cEAAEGvWrFGpm5CQoFKemZkpTExMRMeOHYVCoVDW++qrrwQAlWsoEhsbKwCIjIwMtfEQlRVHVqjSZGdnAwAsLCzKVH/79u0AgIiICJXyESNGAHi6UPdZjRo1QuvWrZVf29rawsPDA5cvX37pmJ9XtNbl559/hkKhKNM5N2/eRHJyMvr166fyP/EmTZrgrbfeUl7ns55fONq6dWvcvn1b+R6WRe/evbF3716kp6fj999/R3p6utopIODpOhep9OmPh8LCQty+fVs5xXX8+PEy9ymTyRAeHl6muu3bt8fgwYMxceJEdOvWDXK5HAsXLnzhebdv3wYAVK9evdR6ffr0eeHoyvbt2+Hg4IBevXopy4yNjTF06FDk5uZi3759KvXfffdd2Nraqm1rwIAByr8bGRnBx8cHQgj0799fWV6tWrVin0kjIyPleh6FQoE7d+7gyZMn8PHx0ei9f15hYSF69eqFnJwc/PTTTzAzMwMAbNiwAVZWVnjrrbdw69Yt5dG8eXOYm5srp592796NgoICfP755ypToUUjNeoUfU9u3br10nETAZwGokpkaWkJAGXeLXDlyhVIpVK4u7urlDs4OKBatWq4cuWKSnnt2rWLtVG9evVi8/Dl0aNHD/j7+2PAgAGwt7dHz5498eOPP5aauBTF6eHhUey1hg0b4tatW8WG1Z+/lqJfAppcS0hICCwsLLB+/XqsWbMGLVq0KPZeFlEoFJg1axbq1asHmUwGGxsb2Nra4u+//8b9+/fL3GfNmjU1Wkg7ffp0WFtbIzk5Gd9++63KVMWLlJSAFDEyMsL48eORnJxc4r10rly5gnr16ikTtSINGzZUvv6sOnXqlNjf898zKysryOVy2NjYFCt//vu4cuVKNGnSBHK5HDVq1ICtrS22bdum0Xv/vPHjx+P333/H2rVr4ebmpiy/cOEC7t+/Dzs7O9ja2qocubm5yMzMBPC/a69Xr55Ku7a2tiUmikXfE11Y8Ev6rUplB0CGy9LSEk5OTjh16pRG55X1B19Ju29e9EuttD6K1lMUMTU1xf79+7Fnzx5s27YNCQkJWL9+Pdq2bYudO3dqbQdQea6liEwmQ7du3bBy5UpcvnxZ5WZiz4uNjcWECRPw0UcfYdKkSbC2toZUKsXw4cPLPIIEPH1/NHHixAnlL8eUlBSVEY6S1KhRA0DZErc+ffpg0qRJmDhxIkJDQzWKTZ3Srk/d96ws38fVq1ejX79+CA0NxahRo2BnZwcjIyPExcXh0qVLLxXnli1b8M0332DSpEno0KGDymsKhQJ2dnZYs2aN2nNLGjkqi6LvyfMJGpGmmKxQperUqRMWLVqEpKQk+Pn5lVrXxcUFCoUCFy5cUP5PFwAyMjJw7949rd5bonr16io7Z4o8/z9r4Oluk3bt2qFdu3aYOXMmYmNjMW7cOOzZswdBQUFqrwMAzp07V+y1s2fPwsbGRjlEr229e/fGsmXLIJVK1S5KLrJx40a0adMGS5cuVSm/d++eyi8ebf6POS8vD+Hh4WjUqBFatWqFqVOnomvXrsodRyWpXbs2TE1NkZqa+sI+ikZX+vXrp3aXiouLC/7++28oFAqV0ZWzZ88qX69oGzduRN26dbF582aV9zcqKuql2jt//jzCwsIQGhqqskutiJubG3bv3g1/f/9Sk6+ia79w4QLq1q2rLM/KyioxUUxNTVWOyhGVB6eBqFKNHj0aZmZmGDBgADIyMoq9funSJeUujJCQEAAotmNn5syZAKDV+4W4ubnh/v37+Pvvv5VlN2/eLLb19c6dO8XO9fb2BoBi26mLODo6wtvbGytXrlRJiE6dOoWdO3cqr7MitGnTBpMmTcLcuXPh4OBQYj0jI6NiozYbNmzA9evXVcqKkip1iZ2mxowZg6tXr2LlypWYOXMmXF1dERYWVuL7WMTY2Bg+Pj44evRomfr54IMP4O7urnY3VUhICNLT07F+/Xpl2ZMnTzBnzhyYm5sjICBAs4t6CUWjL8++/3/99ReSkpI0bis3Nxddu3ZFzZo1sXLlSrXJ5fvvv4/CwkJMmjSp2GtPnjxRfm+DgoJgbGyMOXPmqMRW2g66Y8eOvfA/IURlwZEVqlRubm5Yu3YtevTogYYNG6Jv375o3LgxCgoKcOjQIWzYsEF5PwgvLy+EhYVh0aJFuHfvHgICAnD48GGsXLkSoaGhJW6LfRk9e/bEmDFj0LVrVwwdOhQPHjzA/PnzUb9+fZVFjhMnTsT+/fvRsWNHuLi4IDMzE9999x1q1aqFN954o8T2p02bhrfffht+fn7o378/Hj58iDlz5sDKyqrU6ZnyKrrnyIt06tQJEydORHh4OFq1aoWUlBSsWbNG5X/UwNPvX7Vq1bBgwQJYWFjAzMwMvr6+pa7lUOf333/Hd999h6ioKOUW5OXLlyMwMBATJkzA1KlTSz2/S5cuGDduHLKzs5VroUpiZGSEcePGqV34O2jQICxcuBD9+vXDsWPH4Orqio0bN+LgwYOIj48v82Lw8ujUqRM2b96Mrl27omPHjkhNTcWCBQvQqFEj5ObmatRWTEwMTp8+jfHjxxcbSXJzc4Ofnx8CAgIwePBgxMXFITk5Ge3bt4exsTEuXLiADRs2YPbs2ejevTtsbW0xcuRIxMXFoVOnTggJCcGJEyfw22+/qZ3myczMxN9//43PPvusXO8HEQBuXSbdcP78eTFw4EDh6uoqTExMhIWFhfD39xdz5swRjx49UtZ7/PixiImJEXXq1BHGxsbC2dlZjB07VqWOEE+3Lnfs2LFYP89vmS1p67IQQuzcuVM0btxYmJiYCA8PD7F69epiW5cTExNFly5dhJOTkzAxMRFOTk6iV69e4vz588X6eH577+7du4W/v78wNTUVlpaWonPnzuL06dMqdYr6e35r9Iu2qBZ5dutuSUraujxixAjh6OgoTE1Nhb+/v0hKSlK75fjnn38WjRo1ElWqVFG5zoCAAPHaa6+p7fPZdrKzs4WLi4to1qyZePz4sUq9L774QkilUpGUlFTqNWRkZIgqVaqIVatWlen6Hz9+LNzc3IptXS5qKzw8XNjY2AgTExPh6elZ7HtX2uempO9ZSbE8/z4pFAoRGxsrXFxchEwmE02bNhW//vqr2u30eMHW5bCwMAFA7fH8VuNFixaJ5s2bC1NTU2FhYSE8PT3F6NGjxY0bN5R1CgsLRUxMjPJzERgYKE6dOiVcXFyKtTd//nxRtWpV5XZvovKQCFGB958mInpF+vfvj/Pnz+PAgQOVHQoBaNq0KQIDA5U3XiQqDyYrRPSfcPXqVdSvXx+JiYkqT16mVy8hIQHdu3fH5cuXNdp+TlQSJitERESk07gbiIiIiHQakxUiIiIqk/3796Nz585wcnKCRCIp8W7Qz9q7dy+aNWsGmUwGd3f3Yk+gLwsmK0RERFQmeXl58PLywrx588pUPzU1FR07dkSbNm2QnJyM4cOHY8CAAdixY4dG/XLNChEREWlMIpHgp59+KvXRFWPGjMG2bdtUHqvSs2dP3Lt3DwkJCWXuizeF0zEKhQI3btyAhYUFH/5FRKRnhBDIycmBk5NTsQdiatOjR49QUFCglbaEEMV+38hkMshksnK3nZSUVOyxI8HBwaU+rVsdJis65saNG3B2dq7sMIiIqByuXbuGWrVqVUjbjx49gqlFDeDJA620Z25uXuzuyFFRUVq5m3Z6ejrs7e1Vyuzt7ZGdnY2HDx+W+WGnTFZ0TNHtvE3emgKJsbySoyGqGEfmvvhpykT6KDcnB6283Cv00QwFBQXAkweQNQoDjEzK11hhAXJPr8S1a9dUHlWhjVEVbWKyomOKhuIkxnJIjMuWcRLpGwuL0p/fQ6TvXsk0fhU5JOVMVoTk6VSVpaXlC5+r9TIcHByKPaQ2IyMDlpaWZR5VAZisEBER6ScJgPImRRWcU/n5+WH79u0qZbt27dL4adzcukxERKSPJFLtHBrIzc1FcnIykpOTATzdmpycnIyrV68CAMaOHYu+ffsq63/88ce4fPkyRo8ejbNnz+K7777Djz/+iC+++EKjfpmsEBERUZkcPXoUTZs2RdOmTQEAERERaNq0KSIjIwEAN2/eVCYuAFCnTh1s27YNu3btgpeXF2bMmIElS5YgODhYo345DURERKSPJBItTANpdn5gYCBKuz2burvTBgYG4sSJE5pGpoLJChERkT56iWkctW3oAf2IkoiIiAwWR1aIiIj0USVMA1UWJitERER6SQvTQHoywaIfURIREZHB4sgKERGRPuI0EBEREek07gYiIiIi0g0cWSEiItJHnAYiIiIinWZA00BMVoiIiPSRAY2s6EdKRURERAaLIytERET6iNNAREREpNMkEi0kK5wGIiIiIio3jqwQERHpI6nk6VHeNvQAkxUiIiJ9ZEBrVvQjSiIiIjJYHFkhIiLSRwZ0nxUmK0RERPqI00BEREREuoEjK0RERPqI00BERESk0wxoGojJChERkT4yoJEV/UipiIiIyGBxZIWIiEgfcRqIiIiIdBqngYiIiIh0A0dWiIiI9JIWpoH0ZMyCyQoREZE+4jQQERERkW7gyAoREZE+kki0sBtIP0ZWmKwQERHpIwPauqwfURIREZHB4sgKERGRPjKgBbZMVoiIiPSRAU0DMVkhIiLSRwY0sqIfKRUREREZLI6sEBER6SNOAxEREZFO4zQQERERkW7gyAoREZEekkgkkBjIyAqTFSIiIj1kSMkKp4GIiIhIp3FkhYiISB9J/v8obxt6gMkKERGRHuI0EBEREZGO4MgKERGRHjKkkRUmK0RERHqIyQoRERHpNENKVrhmhYiIiHQaR1aIiIj0EbcuExERkS7jNBARERGRjuDIChERkR6SSKCFkRXtxFLRmKwQERHpIQm0MA2kJ9kKp4GIiIhIp3FkhYiISA8Z0gJbJitERET6yIC2LnMaiIiIiHQaR1aIiIj0kRamgQSngYiIiKiiaGPNSvl3E70aTFaIiIj0kCElK1yzQkRERGU2b948uLq6Qi6Xw9fXF4cPHy61fnx8PDw8PGBqagpnZ2d88cUXePTokUZ9MlkhIiLSRxItHRpYv349IiIiEBUVhePHj8PLywvBwcHIzMxUW3/t2rX48ssvERUVhTNnzmDp0qVYv349vvrqK436ZbJCRESkh4qmgcp7aGLmzJkYOHAgwsPD0ahRIyxYsABVq1bFsmXL1NY/dOgQ/P390bt3b7i6uqJ9+/bo1avXC0djnsdkhYiIyMBlZ2erHPn5+cXqFBQU4NixYwgKClKWSaVSBAUFISkpSW27rVq1wrFjx5TJyeXLl7F9+3aEhIRoFB8X2BIREekhbS6wdXZ2VimPiopCdHS0StmtW7dQWFgIe3t7lXJ7e3ucPXtWbfu9e/fGrVu38MYbb0AIgSdPnuDjjz/WeBqIyQoREZEe0maycu3aNVhaWirLZTJZudotsnfvXsTGxuK7776Dr68vLl68iGHDhmHSpEmYMGFCmdthskJERGTgLC0tVZIVdWxsbGBkZISMjAyV8oyMDDg4OKg9Z8KECfjwww8xYMAAAICnpyfy8vIwaNAgjBs3DlJp2VajcM0KERGRHnrVC2xNTEzQvHlzJCYmKssUCgUSExPh5+en9pwHDx4US0iMjIwAAEKIMvfNkRUiIiJ9VAkPMoyIiEBYWBh8fHzQsmVLxMfHIy8vD+Hh4QCAvn37ombNmoiLiwMAdO7cGTNnzkTTpk2V00ATJkxA586dlUlLWTBZISIiojLp0aMHsrKyEBkZifT0dHh7eyMhIUG56Pbq1asqIynjx4+HRCLB+PHjcf36ddja2qJz586YPHmyRv1KhCbjMFThsrOzYWVlBVlIPCTGppUdDlGFOLOkb2WHQFQhcnKy0aSuPe7fv//CNSAvq+j3hMNHqyE1qVquthQFD5C+7IMKjVcbOLJCRESkhwzp2UBMVoiIiPSQISUr3A1EREREOo0jK0RERPqoEnYDVRYmK0RERHqI00BEREREOoIjK/SfMqBDI3z+jhfsqpni1JU7GLP0II5fzCqx/scdG+Oj9o1Qy8Ycd3Ie4ec/UzFxzWHkPy4EAEilEnz5fnO839oddtWqIv3uA6zdew7TN554VZdEpGLNzwexbMNe3LqTgwZujhj3WVc0aVBbbd0LaemYs3IH/rnwL25k3MWXn7yDsG5vqtRZtC4Ru/5IweVrWZDLqqBpI1eMGNARdZztXsXlUDlwZIXKLTo6Gt7e3pUdhkHp2qouvg7zwzcbjiFw9GacSruNTeNDYGMpV1u/+xtuiOrTElM3HIPv8B/x+fx96NqqLib0bqGsMzzUCx+1b4TRSw/Cd/iPiF79F4Z28cKgkNde1WURKW3fm4xvFm7FZx+8hU3zh8OjrhMGjl2M23dz1NZ/lF8AZ0drRPQPgY21hdo6R/6+jN7v+OOHbz/H0imD8fhJIfp/uQgPHuZX5KWQFkighdvt68miFYNOVgoKCtSWP378+BVHQtrwaecm+H73Wazdcx7n/r2HiEUH8CD/CT5o66G2fksPB/x1LgMb/7iEa1m52HPyOjb9cQnN3e2eqWOP7UfSsPP4NVzLysXWP1Ox5+R1lTpEr8rKTfvw3tu+6NahJdxdHBA97F3IZcbYvOOI2vqeHrUxalBndGzTFCbG6gfSF8cNRNfgFqjn6oAGbk6IG9UTNzPv4Z8L/1bkpRBpRO+SFYVCgalTp8Ld3R0ymQy1a9dW3rY3JSUFbdu2hampKWrUqIFBgwYhNzdXeW6/fv0QGhqKyZMnw8nJCR4eHkhLS4NEIsH69esREBAAuVyONWvWAACWLFmChg0bQi6Xo0GDBvjuu+9UYvn333/Rq1cvWFtbw8zMDD4+Pvjrr7+wYsUKxMTE4OTJk8rsdcWKFa/sPTJExlWk8K5rg71//+8HrBDAvpTraOFhr/acw+fS4V3XBs3cbQEALnYWeKuZM3aduPpMnQwEeNaEm6MVAKCxizVeb2CP3SeuVeDVEBVX8PgJ/jl/HX7N6ivLpFIp/JrVQ/LpK1rrJyfvEQDAyqJ8d0aliveqH2RYmfRuzcrYsWOxePFizJo1C2+88QZu3ryJs2fPIi8vD8HBwfDz88ORI0eQmZmJAQMGYMiQISqJQmJiIiwtLbFr1y6Vdr/88kvMmDEDTZs2VSYskZGRmDt3Lpo2bYoTJ05g4MCBMDMzQ1hYGHJzcxEQEICaNWti69atcHBwwPHjx6FQKNCjRw+cOnUKCQkJ2L17NwDAysrqVb5NBqeGhRxVjKTIuv9QpTzr3kPUq1lN7Tkb/7gEa0s5fpv0DiQSCYyrSLFsx2nM3JysrDPrp2RYmJrg8Oz3UagQMJJK8PW6I9hw4GIFXg1Rcffu56FQoUCN6uYq5TWqWyD1WqZW+lAoFIib/zOaveaK+nUctdImVSBuXdZNOTk5mD17NubOnYuwsDAAgJubG9544w0sXrwYjx49wvfffw8zMzMAwNy5c9G5c2d88803yocsmZmZYcmSJTAxMQEApKWlAQCGDx+Obt26KfuKiorCjBkzlGV16tTB6dOnsXDhQoSFhWHt2rXIysrCkSNHYG1tDQBwd3dXnm9ubo4qVarAwcGh1GvKz89Hfv7/5oazs7PL8xaRBvxfc0RE16YYueQPHLuQiToOVpgS3gojuzdVLqDt2soN77V2x8DZv+PstTvwdLVBbLgfbt7Jww/7LlTyFRBp18Q5P+FCWjrWzPqsskMhUqFXycqZM2eQn5+Pdu3aqX3Ny8tLmagAgL+/PxQKBc6dO6dMVjw9PZWJyrN8fHyUf8/Ly8OlS5fQv39/DBw4UFn+5MkT5QhJcnIymjZtqkxUXlZcXBxiYmLK1QYBt3Me4UmhArZWqg9/tK1misx7D9SeM66nD37cfwGrEs8BAE5fvQszWRXM+vhNzNh0AkIAEz/0RfyWZGw+eElZp5atOb7o1pTJCr1S1azMYCSV4vbdXJXy23dzYFO9/A+gmzRnM/b9dRqrZnwKB9tq5W6PKh53A+koU9PyP4X42WSmpPKidS6LFy9GcnKy8jh16hT+/PNPrcUCPJ3Wun//vvK4do1rIV7G4ycKJF++hQDPmsoyiQR409MJR85lqD3H1KQKFM89dLxQIf7/3Kf/gE1lVaBQqNZRKASk+vHvm/5DTIyr4LX6NfHnif8lyQqFAn+euAjvRi4v3a4QApPmbMbug6ewfOrHqOVYQxvh0itgSGtW9CpZqVevHkxNTZGYmFjstYYNG+LkyZPIy8tTlh08eBBSqRQeHup3g5TE3t4eTk5OuHz5Mtzd3VWOOnXqAACaNGmC5ORk3LlzR20bJiYmKCwsfGFfMpkMlpaWKge9nO9++Rt9gxqgZ0A91K9ZDTMHtoaZzBhr9pwHAMz/PBCRz2xLTjh2FeHtG6Gbvxtq21kgsElNfNXTBwlHrygTlISjVxDxblO0b+YMZ1tzdGzpik87eWLb4bTKuEQycGHvBmDD9r+wZecRXLqSgZhvN+PhowJ0DX76uR7zzTrMXLpdWb/g8ROcuXgdZy5ex+PHhci8dR9nLl7Hleu3lHUmztmMXxKPY9rYPjCrKkPWnWxk3cnGo3zuitR1Eol2Dn2gV9NAcrkcY8aMwejRo2FiYgJ/f39kZWXhn3/+QZ8+fRAVFYWwsDBER0cjKysLn3/+OT788EPlFJAmYmJiMHToUFhZWaFDhw7Iz8/H0aNHcffuXURERKBXr16IjY1FaGgo4uLi4OjoiBMnTsDJyQl+fn5wdXVFamoqkpOTUatWLVhYWEAmk1XAu0JFfjp0GTaWpviqpw/sqlVFStptdJ+8XbnotpaNucooyfSNxyGEwLiePnC0NsPt7EdIOHYFk9b+bxvomKWH8FVPH0wf+AZsLE2RfvcBVuw6g6kbj7/y6yMKCfTG3Xu5+HblDty6m4OGbk5YFDsANtWf3kPlZuZdSJ/57ZN1OxvdPpml/HrZhn1YtmEfWjSpi+9nfAoA+OGXJABA2Mj5Kn3FjuyhTIKIKptEiOfGwXWcQqFAXFwcFi9ejBs3bsDR0REff/wxxo4di5SUFAwbNgxJSUmoWrUq3n33XcycORPm5k9Xz/fr1w/37t3Dli1blO2lpaWhTp06OHHiRLGbuK1duxbTpk3D6dOnYWZmBk9PTwwfPhxdu3YFAFy5cgUjRozArl278OTJEzRq1Ajz5s1Dy5YtkZ+fjz59+iAxMRH37t3D8uXL0a9fvxdeX3Z2NqysrCALiYfEWDtTTUS65sySvpUdAlGFyMnJRpO69rh//36FjZQX/Z6o+/lGSGXqlzaUlSI/D5fndK/QeLVB75KV/zomK2QImKzQf9UrTVaGboRROZOVwvw8XP5W95MVvVqzQkRERIZHr9asEBER0VOGtHWZyQoREZEe0sZuHj3JVTgNRERERLqNIytERER6SCqVQFrOO1QKPbnDJZMVIiIiPcRpICIiIiIdwZEVIiIiPcTdQERERKTTDGkaiMkKERGRHjKkkRWuWSEiIiKdxpEVIiIiPWRIIytMVoiIiPSQIa1Z4TQQERER6TSOrBAREekhCbQwDQT9GFphskJERKSHOA1EREREpCM4skJERKSHuBuIiIiIdBqngYiIiIh0BEdWiIiI9BCngYiIiEinGdI0EJMVIiIiPWRIIytcs0JEREQ6jSMrRERE+kgL00B6cgNbJitERET6iNNARERERDqCIytERER6iLuBiIiISKdxGoiIiIhIR3BkhYiISA9xGoiIiIh0GqeBiIiIiHQER1aIiIj0kCGNrDBZISIi0kNcs0JEREQ6zZBGVrhmhYiIiHSaxsnKw4cP8eDBA+XXV65cQXx8PHbu3KnVwIiIiKhkRdNA5T30gcbJSpcuXfD9998DAO7duwdfX1/MmDEDXbp0wfz587UeIBERERVXNA1U3kMfaJysHD9+HK1btwYAbNy4Efb29rhy5Qq+//57fPvtt1oPkIiIiAybxgtsHzx4AAsLCwDAzp070a1bN0ilUrz++uu4cuWK1gMkIiKi4iTQwm4grURS8TQeWXF3d8eWLVtw7do17NixA+3btwcAZGZmwtLSUusBEhERUXFSiUQrhz7QOFmJjIzEyJEj4erqipYtW8LPzw/A01GWpk2baj1AIiIiMmwaTwN1794db7zxBm7evAkvLy9lebt27dC1a1etBkdERETqGdJN4V7qPisODg6wsLDArl278PDhQwBAixYt0KBBA60GR0REROpxN1Apbt++jXbt2qF+/foICQnBzZs3AQD9+/fHiBEjtB4gERERFSeVaOfQ1Lx58+Dq6gq5XA5fX18cPny41Pr37t3DZ599BkdHR8hkMtSvXx/bt2/X7Fo1DfKLL76AsbExrl69iqpVqyrLe/TogYSEBE2bIyIiIj2xfv16REREICoqCsePH4eXlxeCg4ORmZmptn5BQQHeeustpKWlYePGjTh37hwWL16MmjVratSvxmtWdu7ciR07dqBWrVoq5fXq1ePWZSIioldFooVn+2h4+syZMzFw4ECEh4cDABYsWIBt27Zh2bJl+PLLL4vVX7ZsGe7cuYNDhw7B2NgYAODq6qpxmBqPrOTl5amMqBS5c+cOZDKZxgEQERGR5rR5u/3s7GyVIz8/v1h/BQUFOHbsGIKCgpRlUqkUQUFBSEpKUhvj1q1b4efnh88++wz29vZo3LgxYmNjUVhYqNG1apystG7dWnm7feBpVqdQKDB16lS0adNG0+aIiIiokjk7O8PKykp5xMXFFatz69YtFBYWwt7eXqXc3t4e6enpatu9fPkyNm7ciMLCQmzfvh0TJkzAjBkz8PXXX2sUn8bTQFOnTkW7du1w9OhRFBQUYPTo0fjnn39w584dHDx4UNPmiIiI6CVI/v9PedsAgGvXrqnc2FVbMyUKhQJ2dnZYtGgRjIyM0Lx5c1y/fh3Tpk1DVFRUmdvROFlp3Lgxzp8/j7lz58LCwgK5ubno1q2bcqUvERERVbyX3c3zfBsAYGlp+cK70NvY2MDIyAgZGRkq5RkZGXBwcFB7jqOjI4yNjWFkZKQsa9iwIdLT01FQUAATE5MyxalxsgIAVlZWGDdu3MucSkRERHrIxMQEzZs3R2JiIkJDQwE8HTlJTEzEkCFD1J7j7++PtWvXQqFQQCp9uvLk/PnzcHR0LHOiArzEmpWEhAT88ccfyq/nzZsHb29v9O7dG3fv3tW0OSIiInoJlXFTuIiICCxevBgrV67EmTNn8MknnyAvL0+5O6hv374YO3assv4nn3yCO3fuYNiwYTh//jy2bduG2NhYfPbZZxr1q3GyMmrUKGRnZwMAUlJSEBERgZCQEKSmpiIiIkLT5oiIiOglaHM3UFn16NED06dPR2RkJLy9vZGcnIyEhATloturV68qbxYLPF24u2PHDhw5cgRNmjTB0KFDMWzYMLXbnEuj8TRQamoqGjVqBADYtGkTOnfujNjYWBw/fhwhISGaNkdERER6ZMiQISVO++zdu7dYmZ+fH/78889y9anxyIqJiQkePHgAANi9ezfat28PALC2tlaOuBAREVHFkkokWjn0gcYjK2+88QYiIiLg7++Pw4cPY/369QCeLph5/q62REREVDH41OVSzJ07F1WqVMHGjRsxf/585f39f/vtN3To0EHrARIREVFxhvTUZY1HVmrXro1ff/21WPmsWbO0EhARERHRszQeWTl+/DhSUlKUX//8888IDQ3FV199hYKCAq0GR0REROpVxm6gyqJxsjJ48GCcP38ewNN7/vfs2RNVq1bFhg0bMHr0aK0HSERERMUZ0gJbjZOV8+fPw9vbGwCwYcMGvPnmm1i7di1WrFiBTZs2aTs+IiIiMnAar1kRQkChUAB4unW5U6dOAJ7e+OXWrVvajY6IiIjUkvz/Ud429IHGyYqPjw++/vprBAUFYd++fZg/fz6ApzeLe/6x0URERFQxtLGbR192A2k8DRQfH4/jx49jyJAhGDduHNzd3QEAGzduRKtWrbQeIBERERk2jUdWmjRporIbqMi0adNUHgFNREREFUcqeXqUtw19oHGyUhK5XK6tpoiIiOgFDGkaSONkpbCwELNmzcKPP/6Iq1evFru3yp07d7QWHBEREZHGa1ZiYmIwc+ZM9OjRA/fv30dERAS6desGqVSK6OjoCgiRiIiI1DGEG8IBL5GsrFmzBosXL8aIESNQpUoV9OrVC0uWLEFkZGS5HwFNREREZWNIzwbSOFlJT0+Hp6cnAMDc3Bz3798HAHTq1Anbtm3TbnRERESkVtEC2/Ie+kDjZKVWrVq4efMmAMDNzQ07d+4EABw5cgQymUy70REREZHB0zhZ6dq1KxITEwEAn3/+OSZMmIB69eqhb9+++Oijj7QeIBERERVnSNNAGu8GmjJlivLvPXr0QO3atZGUlIR69eqhc+fOWg2OiIiI1OPt9jXg5+cHPz8/bcRCRERE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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df_sample[\"answer_true\"].map(QA_PROMPT_RAILS_MAP).tolist()\n",
    "classes = list(QA_PROMPT_RAILS_MAP.values())\n",
    "\n",
    "print(classification_report(true_labels, Q_and_A_classifications, labels=classes))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=classes\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
